import http from 'wechat-http'

// 接口基础地址
http.baseURL = 'https://live-api.itheima.net/'

// 请求拦截器
http.intercept.request = (options) => {
  // 合并头信息
  options.header = {
    // 权限认证
    Authorization: 'Bearer ' + getApp().token,
    // 默认头信息
    ...options.header,
  }
  // 拦截器处理后的请求参数
  return options
}
// 响应拦截器
http.intercept.response = async ({ data, config }) => {
  // console.log('---响应拦截器', data)
  if (data.code === 401) {
    // token过期 之前 重定向到登录页 现在 提升用户的体验
    // 时效性: token 8小时 refreshToken 72小时
    // refreshToken作用: 获取新的token
    const app = getApp()

    // 判断响应状态码401&&请求路径/refreshToken的情况
    if (config.url.includes('/refreshToken')) {
      // 跳转到登录页 - 携带当前的页面路径
      const pageStack = getCurrentPages()
      const currPage = pageStack.pop()
      const route = currPage.route

      // 判断是否是tabbar页面
      const isTabbar = wx.utils.isTabbarPage(route)
      // 生成标识
      const routeType = isTabbar ? 'switchTab' : 'redirectTo'
      // 将标识传递给登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirectUrl=/${route}&routeType=${routeType}`,
      })
    }
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: 'Bearer ' + app.refreshToken,
      },
    })
    // console.log(res)
    if (res.code !== 10000) return wx.utils.toast('刷新token失败')
    // 将新token & 新refreshToken进行存储
    app.setToken('token', res.data.token)
    app.setToken('refreshToken', res.data.refreshToken)
    // 获取原来的请求参数
    // console.log(config)
    // config = Object.assign(源对象, 目标对象)
    config = Object.assign(config, {
      header: {
        Authorization: 'Bearer ' + res.data.token, // 注意: 更新后的token
      },
    })
    // console.log('--- 更新后的请求参数', config)
    // 重新再次发送请求 - 将结果进行返回
    return http(config)
  }
  return data
}
// 也可挂载到 wx 全局命名空间
wx.http = http
